Why Eviction Data Matters

The process and consequences of eviction have become high-profile issues in public discourse over the past several years. Being evicted causes major disruptions to people’s lives, with cascading and often lasting impacts on the ability to secure new housing, stay employed, and keep families together. During the first year of the COVID-19 pandemic, the moratoria on no-cause evictions from the CDC and state and local governments explicitly acknowledged the importance of stable housing on individual and public health and—at least temporarily—brought eviction to the forefront of national news.

Despite this increased attention, data sources on evictions are often difficult to access and inconsistent across different jurisdictions. Especially little is known about evictions filed against residents of regulated affordable housing.

Regulated, or “Big A”, affordable housing describes properties whose rents are capped according to federal rules, or whose tenants receive direct or indirect subsidies from public sources. Affordable housing is intended to be a place where low-income people can rent decent housing that they may not otherwise be able to afford or qualify for in the broader housing market. In this way, most people think of affordable housing as relatively stable—for many, it is the housing of last resort.

Yet residents of affordable housing can also be served with evictions. For people who already have difficulty accessing housing, or have particularly limited options in tight housing markets, evictions can have devastating effects. Examining trends in evictions in regulated affordable housing is an important first step to understanding how well our publicly-supported housing serves its residents and fulfills its mission to create housing stability for lower-income people.

Analytical Approach

This analysis examines trends in evictions filed against residents of affordable housing in Multnomah County between January 2019 and October 2022. We thank the Evicted in Oregon collective—particularly Dr. Lisa Bates and Dr. Azad Amir-Ghassemi—for sharing their data with us for this project. Evicted in Oregon built this data set from disparate sources and conducted some initial cleaning and compiling. Much of our analysis went deeper into cleaning and sorting this data. We then pulled out some high-level trends and considered the data’s spatial dimensions.

Data Sources

We received two data sets from Evicted in Oregon:

  1. A csv of all eviction cases filed in county court for all counties in Oregon between January 2019 and October 2022.
  2. A csv of regulated affordable properties at which eviction cases had been filed between January 2019 and October 2022. This data came from Oregon Housing and Community Services.

As shown below, each original csv contained data stored primarily as character strings. Because of this format, many of the values were inconsistent across different observations, even when they should match, such as with property address, or owner name. There were also many missing values, captured as either NA or “—”.

## Rows: 45,497
## Columns: 38
## $ case_code             <chr> "20LT00017", "20LT00025", "20LT00026", "20LT0002…
## $ date.x                <chr> "1/2/20", "1/2/20", "1/2/20", "1/2/20", "1/2/20"…
## $ Oregon_Moratorium     <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ Multnomah_Moratorium  <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ status                <chr> "Closed", "Closed", "Closed", "Closed", "Closed"…
## $ location.x            <chr> "Multnomah", "Multnomah", "Multnomah", "Multnoma…
## $ plaintiff_name        <chr> "Ash Street Courtyard LLC; Stark Firs Management…
## $ defendant_addr        <chr> "<U+00A0><U+00A0>12026 SE Ash Street, Unit Numbe…
## $ Agent_Name            <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
## $ tenant_lawyer         <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
## $ landlord_lawyer       <chr> "Jeffrey S Bennett; Anna S Mccormack", NA, "Marc…
## $ landlord_has_lawyer   <dbl> 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, …
## $ tenant_has_lawyer     <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ month                 <chr> "1/1/20", "1/1/20", "1/1/20", "1/1/20", "1/1/20"…
## $ zip                   <chr> "97216", "97211", "97209", "97233", "97216", "97…
## $ judgment              <chr> "Judgment - General Dismissal", "Judgment - Gene…
## $ Judgment_General      <dbl> 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, …
## $ Judgment_Dismissal    <dbl> 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, …
## $ Judgment_Creates_Lien <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ FA                    <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ SA                    <dbl> 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, …
## $ writ                  <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, …
## $ Default               <dbl> 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, …
## $ OPEN                  <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ PENDING               <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ CLOSED                <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ AGENT                 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ SubReg                <dbl> 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, …
## $ OAHI                  <dbl> 0, NA, 1, 1, NA, NA, NA, NA, NA, NA, 1, 0, NA, N…
## $ NHPD                  <dbl> 1, NA, 1, 1, NA, NA, NA, NA, NA, NA, 1, 0, NA, N…
## $ Metro                 <dbl> 1, NA, 1, 1, NA, NA, NA, NA, NA, NA, 1, 1, NA, N…
## $ HUD                   <dbl> 0, NA, 0, 0, NA, NA, NA, NA, NA, NA, 0, 0, NA, N…
## $ USDA                  <dbl> 1, NA, 1, 1, NA, NA, NA, NA, NA, NA, 1, 1, NA, N…
## $ Units                 <dbl> 47, NA, 199, 70, NA, NA, NA, NA, NA, NA, 199, 84…
## $ AssistedUnits         <dbl> 47, NA, 199, 70, NA, NA, NA, NA, NA, NA, 199, 84…
## $ Owner                 <chr> "ASH STREET, LLC", NA, "Home Forward", "Human So…
## $ OwnerType             <chr> "FOR_PROFIT", NA, "HOUSING AUTHORITY", "Non-Prof…
## $ Management            <chr> "CASCADE MANAGEMENT INC", NA, "HOUSING AUTHORITY…
## Rows: 524
## Columns: 81
## $ addr.y                   <chr> "10 N WEIDLER ST 97227", "10 NW BROADWAY  972…
## $ total_FEDs               <dbl> 15, 34, 3, 3, 1, 12, 2, 3, 4, 7, 2, 14, 2, 1,…
## $ `Jan2019-March2020`      <dbl> 6, 20, 2, 3, 0, 10, 2, 3, 0, 5, 2, 5, 0, 0, 1…
## $ `March2020-July2021`     <dbl> 4, 6, 0, 0, 1, 0, 0, 0, 0, 2, 0, 1, 0, 0, 1, …
## $ `July2021-Nov2022`       <dbl> 5, 8, 1, 0, 0, 2, 0, 0, 4, 0, 0, 8, 2, 1, 1, …
## $ OAHI                     <dbl> 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, …
## $ NHPD                     <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, …
## $ Metro                    <dbl> 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, …
## $ HUD                      <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, …
## $ USDA                     <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ AddressNumber            <dbl> 10, 10, 100, 100, 100, 100, 1002, 10025, 1003…
## $ StreetNamePreDirectional <chr> "N", "NW", "E", "E", "N", "NE", "SE", "SW", "…
## $ StreetName               <chr> "WEIDLER", "BROADWAY", "11TH", "CAROLINA", "G…
## $ StreetNamePostType       <chr> "ST", NA, "AVE", "ST", "ST", "AVE", "DR", "AV…
## $ City                     <chr> "PORTLAND", "PORTLAND", "EUGENE", "LEBANON", …
## $ State                    <chr> "OR", "OR", "OR", "OR", "OR", "OR", "OR", "OR…
## $ ZipCode                  <dbl> 97227, 97209, 97401, 97355, 97501, 97220, 975…
## $ County                   <chr> "MULTNOMAH", "MULTNOMAH", "LANE", "LINN", "JA…
## $ Name                     <chr> "MADRONA STUDIOS A", "HELEN ANN SWINDELLS BLD…
## $ Units                    <dbl> 132, 105, 54, 16, 50, 61, 50, 32, 253, 39, 24…
## $ AssistedUnits            <dbl> 132, 105, 54, 2, 49, 60, 49, 11, 253, 6, 23, …
## $ Owner                    <chr> "Central City Concern", "Home Forward", "St V…
## $ OwnerType                <chr> "NON_PROFIT", "HOUSING AUTHORITY", "Non-Profi…
## $ Management               <chr> "CENTRAL CITY CONCERN", "HOUSING AUTHORITY OF…
## $ ACCESSIBLE.COUNT         <dbl> 3, NA, NA, 2, 0, NA, NA, NA, NA, NA, NA, NA, …
## $ PSH.COUNT                <dbl> 13, NA, NA, NA, 0, NA, NA, NA, NA, NA, NA, NA…
## $ ELD.COUNT                <dbl> 0, 102, 0, 16, 0, NA, NA, NA, NA, 0, NA, 0, N…
## $ FAM.COUNT                <dbl> 0, 0, 54, 16, 36, NA, NA, NA, NA, 39, NA, 59,…
## $ HIV.COUNT                <dbl> 0, 0, 0, 0, 0, NA, NA, NA, NA, 0, NA, 0, NA, …
## $ HOM.COUNT                <dbl> 13, 102, 0, 0, 0, NA, NA, NA, NA, 0, NA, 0, N…
## $ PD.COUNT                 <dbl> 0, 0, 0, 0, 0, NA, NA, NA, NA, 0, NA, 0, NA, …
## $ SUD.COUNT                <dbl> 13, 0, 0, 0, 0, NA, NA, NA, NA, 0, NA, 0, NA,…
## $ VETS.COUNT               <dbl> 0, 0, 0, 0, 0, NA, NA, NA, NA, 0, NA, 0, NA, …
## $ WKFC                     <dbl> 0, 0, 0, 0, 0, NA, NA, NA, NA, NA, NA, 0, NA,…
## $ HTF                      <chr> "---", "---", "---", "---", "---", NA, NA, NA…
## $ OHCS.HOME                <chr> "---", "---", "---", "7/19/40", "8/3/77", NA,…
## $ HUD.MF                   <chr> "---", "---", "---", "51043", "---", NA, NA, …
## $ USDA.RD                  <chr> "---", "---", "---", "---", "---", NA, NA, NA…
## $ LIHTC.9....1.            <chr> "2/1/71", "1/1/53", "1/1/55", "---", "9/1/77"…
## $ LIHTC.9....2.            <chr> "---", "---", "---", "---", "---", NA, NA, NA…
## $ LIHTC.4.                 <chr> "---", "---", "---", "---", "---", NA, NA, NA…
## $ OAHTC                    <chr> "46048", "---", "45446", "45200", "50248", NA…
## $ LIFT                     <chr> "---", "---", "---", "---", "---", NA, NA, NA…
## $ OHCS.BONDS               <chr> "---", "---", "---", "---", "---", NA, NA, NA…
## $ GHAP                     <chr> "---", "---", "---", "---", "---", NA, NA, NA…
## $ HDGP                     <chr> "62121", "56190", "55880", "50625", "---", NA…
## $ OHCS.GRANTS              <chr> "---", "---", "---", "---", "---", NA, NA, NA…
## $ LATEST                   <chr> "2/1/71", "11/2/53", "1/1/55", "7/19/40", "9/…
## $ HOUSING.TYPE             <chr> "RENTAL HOUSING", "RENTAL HOUSING", "RENTAL H…
## $ Market.Rate.Units        <chr> "0", "-", "-", "-", "0", NA, NA, NA, NA, "-",…
## $ X80..AMI.Units           <chr> "0", "-", "-", "-", "0", NA, NA, NA, NA, "-",…
## $ X60..AMI.Units           <chr> "12", "-", "-", "-", "13", NA, NA, NA, NA, "-…
## $ X50..AMI.Units           <chr> "0", "-", "-", "-", "36", NA, NA, NA, NA, "-"…
## $ X40..AMI.Units           <chr> "120", "-", "-", "-", "0", NA, NA, NA, NA, "-…
## $ X30..AMI.Units           <chr> "0", "-", "-", "-", "0", NA, NA, NA, NA, "-",…
## $ No.Income                <chr> "0", "-", "-", "-", "0", NA, NA, NA, NA, "-",…
## $ TargetTenantType         <chr> "Homeless", "Elderly or disabled", "Family", …
## $ S8_1_Status              <chr> NA, NA, NA, "Active", NA, NA, NA, "Active", N…
## $ S8_1_ProgramName         <chr> NA, NA, NA, "811 PRA DEMO", NA, NA, NA, "LMSA…
## $ S202_1_Status            <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ S202_1_ProgramName       <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ S236_1_Status            <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ S236_1_ProgramName       <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ FHA_1_Status             <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ FHA_1_ProgramName        <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ LIHTC_1_Status           <chr> "Active", "Active", "Active", NA, NA, "Active…
## $ LIHTC_1_ProgramName      <chr> NA, "9% Tax Credit", "9% Tax Credit", NA, NA,…
## $ RHS515_1_Status          <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ RHS515_1_ProgramName     <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ RHS538_1_Status          <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ RHS538_1_ProgramName     <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ HOME_1_Status            <chr> NA, NA, NA, "Active", "Active", "Active", NA,…
## $ HOME_1_ProgramName       <chr> NA, NA, NA, "HOME", "HOME", "HOME", NA, "HOME…
## $ PH_1_Status              <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ PH_1_ProgramName         <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ State_1_Status           <chr> "Active", "Active", "Active", "Active", "Acti…
## $ State_1_ProgramName      <chr> "OR State subsidy", "OR State subsidy", "OR S…
## $ Pbv_1_Status             <chr> NA, NA, NA, NA, "Active", NA, NA, NA, NA, NA,…
## $ Pbv_1_ProgramName        <chr> NA, NA, NA, NA, "Project Based Vouchers", NA,…
## $ Mr_1_Status              <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ Mr_1_ProgramName         <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…

Data Processing

To narrow the focus of our cleaning and analytical efforts, we focused only on eviction cases in Multnomah County. Per Evicted in Oregon member Dr. Bates, Multnomah County’s eviction records are the most complete and consistent. We also limited our analysis to cases that had been closed—that is, cases that had ended in eviction or dismissal—so we could look at trends in case outcomes. This means we did exclude some cases that were filed but not resolved within the timeframe of the dataset.

With those parameters, we narrowed the dataset of eviction case records to 1,606 observations, as shown below. The final number of property records was 524.

## # A tibble: 1,606 × 39
##    case_code date       oregon…¹ multn…² locat…³ plain…⁴ plain…⁵ plain…⁶ plain…⁷
##    <chr>     <date>        <dbl>   <dbl> <chr>   <chr>   <chr>   <chr>   <chr>  
##  1 20LT00017 2020-01-02        0       0 Multno… Ash St… Ash St… " Star… <NA>   
##  2 20LT00026 2020-01-02        0       0 Multno… Income… Income… " Pear… <NA>   
##  3 20LT00028 2020-01-02        0       0 Multno… Lincol… Lincol… " Pinn… <NA>   
##  4 20LT00087 2020-01-03        0       0 Multno… Income… Income… " Pear… <NA>   
##  5 20LT00088 2020-01-03        0       0 Multno… Portla… Portla…  <NA>   <NA>   
##  6 20LT00115 2020-01-06        0       0 Multno… Quantu… Quantu… " Unth… <NA>   
##  7 20LT00121 2020-01-06        0       0 Multno… Centra… Centra… " Haze… <NA>   
##  8 20LT00122 2020-01-06        0       0 Multno… Cascad… Cascad… " Lone… <NA>   
##  9 20LT00174 2020-01-08        0       0 Multno… Reach … Reach … " Reac… <NA>   
## 10 20LT00175 2020-01-08        0       0 Multno… Centra… Centra… " Haze… <NA>   
## # … with 1,596 more rows, 30 more variables: defendant_addr <chr>,
## #   street_unit <chr>, street <chr>, unit <chr>, city <chr>, state <chr>,
## #   zip <chr>, landlord_has_lawyer <chr>, tenant_has_lawyer <chr>, month <chr>,
## #   eviction <chr>, dismissal <chr>, lien <chr>, fa <dbl>, sa <chr>,
## #   writ <chr>, default <chr>, agent <dbl>, units <dbl>, assisted_units <dbl>,
## #   owner <chr>, owner_type <chr>, management <chr>, lat <dbl>, long <dbl>,
## #   owner_clean <chr>, outcome <chr>, management_clean <chr>, …

We attempted to convert the raw data from these two sources into tidy formats in order to be able to run statistical analyses. This process required transforming the values of several variables through rewriting. We used a combination of replacement tools from the stringr, dplyr, lubridate, and forcats packages to create consistent character strings or change the variable types. Because of the extensive code such rewriting required, we decided to focus on three primary character variables: owner type, owner, and management company. Examples of this processing are shown below:

# Clean values: owner_type
subreg_mult <- subreg_mult %>%  #rewrite similar values
  mutate(owner_type = case_when(
    owner_type %in% c("non_profit", "non-profit", "limited dividend") ~ "nonprofit",
    owner_type %in% c("for_profit", "profit") ~ "for profit",
    owner_type %in% c("housing authority", "government") ~ "public entity",
    owner_type == owner_type & owner == "home forward" ~ "public entity",
    TRUE ~ owner_type))
# Create new column with cleaner OWNER names 
subreg_mult <- subreg_mult %>% 
  mutate(owner_clean = 
           str_replace_all(owner, c(
             "\\." = "",
             "," = "",
             "cascadia behavioral healthcare inc\\s.*$" = "cascadia behavioral healthcare inc",
             "home forward\\s.*$" = "home forward",
             "human solutions\\s.*$" = "human solutions",
             "hacienda community development\\s.*$" = "hacienda community development",
             "specialized housing\\s.*$" = "specialized housing inc",
             "quadriplegics united against dependency\\s.*$" =  "quadriplegics united against dependency",
             "reach community development\\s.*$" = "reach community development",
             "central city housing llc" = "central city concern",
             "cascade housing association\\s.*$" = "cascade housing association",
             "bell david.*$" = "david bell",
             "heartland columbia.*$" = "heartland columbia",
             "brenneke tom (gm buckman heights llc)" = "tom brenneke",
             "limited partnership" = "lp",
             "menashe michael" = "michael menashe",
             "housing authority of portland" = "home forward"
           )))

Variables of Interest

Each observation in our primary data set represents one eviction case filed in court. The primary variable we considered was the outcome of that case, simplified between whether the eviction was carried out or not. There are several intermediate steps and statuses that a case can have between filing and closure, including stipulated agreement, if a lien was placed on the property, if a judge issued a writ, etc. For this analysis, we focused on the final outcome.

The owner variable describes the registered owner of a property. This value was often inconsistent with other indications of ownership, such as the name of the plaintiff in the eviction filing. Many properties are registered to an LLC whose only asset is that single property, though the LLC itself may be owned by a larger entity. These inconsistencies made it hard to draw conclusions about total ownership and control of properties across the county without more detailed mapping of property and owner relationships.

## # A tibble: 110 × 2
##    owner_clean                                n
##    <chr>                                  <int>
##  1 9101 foster llc                            6
##  2 a phillips square                          1
##  3 alberta simmons senior housing             1
##  4 alberta street apartments preservation     1
##  5 aldercrest llc                             7
##  6 alpine east inc                            5
##  7 armstrong stafford llc                     4
##  8 artspace projects inc                      2
##  9 ash street llc                            31
## 10 brenneke tom (gm buckman heights llc)      6
## # … with 100 more rows

The management variable describes the entity that is registered with the county or state as responsible for the day-to-day management of the property and handling tenant services. This variable was also inconsistently entered, even for eviction cases that were linked to the same property. For some cases, the property owner was listed as the manager; in others, management was contracted out to another company. As with property owners, inconsistency in this variable made it difficult to accurately observe trends in the relationship between eviction cases and property management.

## # A tibble: 64 × 2
##    management_clean                       n
##    <chr>                              <int>
##  1 affinity property management           7
##  2 anchor nw property group               9
##  3 bh lp                                  6
##  4 brian mccarl & co                     10
##  5 caritas housing initiatives llc        3
##  6 cascade management inc               118
##  7 cascadia behavioral healthcare inc    87
##  8 cedar sinai park                       2
##  9 central city concern                 188
## 10 coda                                   2
## # … with 54 more rows

The owner type variable describes the category to which the property owner belongs, according to the state’s classification system. This variable originally had inconsistency in its formatting, but we were able to narrow it down to 7 classes. We further consolidated these into the categories for profit, multiple, nonprofit, and public entity. Additionally, there were 13 cases for which we could not accurately assign ownership; these were excluded from our analysis.

## # A tibble: 5 × 2
##   owner_type        n
##   <chr>         <int>
## 1 for profit      408
## 2 multiple         32
## 3 nonprofit       804
## 4 public entity   349
## 5 <NA>             13

Key Findings

Geospatial Mapping of Evictions by Property

We next decided to map eviction filings in order to both observe spatial patterns and create a tool for investigating these evictions by property. This process involved geocoding the dataset of regulated affordable properties using the tidygeocoder package with a Google API. We then joined this with the eviction filings data (matched by street address) in order to maximize the amount of information aggregated at the property level. Leaflet was used to map the properties, rendered by owner type (color) and number of total eviction filings (circle radius). Clickable pop-ups were generated to display key property and eviction information Given Multnomah County’s involvement in overseeing housing and homeless services, County Commissioner Districts were underlaid using the simple features package.

#Create Leaflet map
property_map <- leaflet() %>%
  addProviderTiles("CartoDB.Positron") %>%
  addPolygons(data = county_d, color = "navy", fillOpacity = 0.1, weight = 2) %>%
  addCircles(data = joined_df_short, lng = ~long.x, lat = ~lat.x,
             color = ~pal(owner_type.y),
             radius = ~total_feds_rev * 4,
             popup = paste(
               joined_df_short$name, "<br>", 
               joined_df_short$full_address, "<br>",
               "Owner:", joined_df_short$owner_map, "<br>", 
               "Management:", joined_df_short$management_map, "<br>",
               "Owner Type:", str_to_title(joined_df_short$owner_type.y), "<br>",
               "Units:", joined_df_short$units.x, 
               paste0("(",joined_df_short$assisted_units.x," assisted)"), "<br>", 
               "Filings:", joined_df_short$total_feds_rev, "<br>",
               "Evictions:", joined_df_short$total_evictions
               )) %>%
  addLegend(data = joined_df_short, "topright", pal = pal, 
            values = ~owner_type.y,
            title = "Property Owner Type",
            opacity = 1) %>%
  addLegend(data = county_d, "bottomright", color = "navy",
            opacity = 1,
            label = "Multnomah County Districts")

Property, Owner, and Management Statistics

We also produced tables of basic eviction statistics by property, owner, and management company. This allows for an alternative method of examining properties where evictions are occurring, and begins to explore who is evicting and the process of their evictions. While more research is needed to rectify inconsistencies in owner and management reporting, as well as tease out shell companies, this serves as a starting point. Counts and percentages (out of total filings per entity) were calculated for outcomes - i.e. evictions and dismissals - as well as for accompanied processes, including stipulated agreements, liens, writs, and defaults. (See Evicted in Oregon’s explanation of How Evictions Work to learn more about these terms.)

# Create tibble of outcome statistics by PROPERTY
source("geocoding and map.R")
property_stats <- joined_df_short %>%
  group_by(full_address) %>%
  summarize(owner_clean = first(owner_clean),
            total_filings = n(),
            owner_clean = first(owner_clean),
            evictions = sum(eviction == "yes"),
            p_e = sum(eviction == "yes")/n(),
            dismissals = sum(dismissal == "yes"),
            p_di = sum(dismissal == "yes")/n(),
            default. = sum(default == "yes"),
            p_de = sum(default == "yes")/n(),
            stipulated_agreement = sum(sa == "yes"),
            p_sa = sum(sa == "yes")/n(),
            lien. = sum(lien == "yes"),
            p_l = sum(lien == "yes")/n(),
            writ. = sum(writ == "yes"),
            p_w = sum(writ == "yes")/n()) %>%
  arrange(desc(evictions)) %>%
  filter(!is.na(full_address))

The DT package was used to format the tables in a more readable, web-friendly way that allows for sorting and searching.

This analysis shows, for example, that the property with the highest number of filings (52) and executed evictions (29) was the nonprofit-owned Clifford Apartments in Southeast Portland. This means that 56 percent of the cases filed by this property resulted in eviction. This is higher than the rate of executed evictions for nonprofits as a whole (48 percent).

Example of table produced by the above code:

Directions for Further Analysis

An important precursor for further analysis is to verify all the property information, including ownership, corporate structure, and management. This detailed cleaning and relating would allow better analysis of property-level and owner-level trends.

Incorporating the causes listed in each eviction filing would also allow any trends in issues that lead to eviction filings and what is more or less likely to make a case end in an executed eviction.

Another avenue for deeper exploration is looking at the affordability levels and types of units for which these cases are being filed and succeeding. If there are trends in higher cases against lower-income people, or in certain types of housing, like permanent supportive housing, or family housing, this analysis could point toward policy interventions to improve housing stability.